#!/bin/bash

# 音频格式转换工具 - Dify AI 语音转文字优化
# 使用方法: ./audio-format-converter.sh <input_file> [output_format]

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 支持的输入格式
SUPPORTED_INPUT_FORMATS=("mp3" "wav" "m4a" "aac" "ogg" "wma" "flac" "opus" "webm")

# 推荐的输出格式（Dify AI 支持）
RECOMMENDED_OUTPUT_FORMATS=("mp3" "wav")

print_usage() {
    echo -e "${BLUE}🎵 音频格式转换工具 - Dify AI 语音转文字优化${NC}"
    echo "================================================"
    echo
    echo -e "${YELLOW}📖 使用方法:${NC}"
    echo "  ./audio-format-converter.sh <input_file> [output_format]"
    echo
    echo -e "${YELLOW}📋 参数说明:${NC}"
    echo "  input_file    输入音频文件路径"
    echo "  output_format 输出格式 (可选，默认为 mp3)"
    echo
    echo -e "${YELLOW}📝 示例:${NC}"
    echo "  ./audio-format-converter.sh voice.ogg mp3"
    echo "  ./audio-format-converter.sh audio.wma wav"
    echo "  ./audio-format-converter.sh recording.m4a"
    echo
    echo -e "${YELLOW}🔧 依赖要求:${NC}"
    echo "  需要安装 FFmpeg: https://ffmpeg.org/download.html"
    echo
    echo -e "${YELLOW}💡 提示:${NC}"
    echo "  - MP3 格式推荐用于语音识别"
    echo "  - WAV 格式推荐用于高质量音频"
    echo "  - 转换后的文件会自动优化为语音识别最佳参数"
    echo
}

check_ffmpeg() {
    if ! command -v ffmpeg &> /dev/null; then
        echo -e "${RED}❌ 错误: 未找到 FFmpeg${NC}"
        echo "请先安装 FFmpeg: https://ffmpeg.org/download.html"
        echo
        echo "macOS 安装方法:"
        echo "  brew install ffmpeg"
        echo
        echo "Ubuntu/Debian 安装方法:"
        echo "  sudo apt update && sudo apt install ffmpeg"
        echo
        echo "CentOS/RHEL 安装方法:"
        echo "  sudo yum install ffmpeg"
        echo
        return 1
    fi
    return 0
}

get_file_info() {
    local file_path="$1"
    
    if [[ ! -f "$file_path" ]]; then
        return 1
    fi
    
    local file_size=$(stat -c%s "$file_path" 2>/dev/null || stat -f%z "$file_path" 2>/dev/null)
    local file_size_mb=$(echo "scale=2; $file_size / 1024 / 1024" | bc 2>/dev/null || echo "0")
    local file_ext=$(echo "${file_path##*.}" | tr '[:upper:]' '[:lower:]')
    local supported=false
    
    for format in "${SUPPORTED_INPUT_FORMATS[@]}"; do
        if [[ "$file_ext" == "$format" ]]; then
            supported=true
            break
        fi
    done
    
    echo "$file_size|$file_size_mb|$file_ext|$supported"
}

convert_audio() {
    local input_file="$1"
    local output_format="$2"
    
    local input_dir=$(dirname "$input_file")
    local input_name=$(basename "$input_file" | sed 's/\.[^.]*$//')
    local output_file="$input_dir/${input_name}_converted.$output_format"
    
    echo -e "${BLUE}🔄 正在转换: $(basename "$input_file") → ${output_format^^}${NC}"
    echo "📁 输出文件: $output_file"
    
    # 根据输出格式设置转换参数
    if [[ "$output_format" == "mp3" ]]; then
        echo "⚙️  转换参数: MP3 格式 (优化为语音识别)"
        ffmpeg -i "$input_file" -acodec libmp3lame -ar 16000 -ac 1 -b:a 128k -y "$output_file" 2>/dev/null
    elif [[ "$output_format" == "wav" ]]; then
        echo "⚙️  转换参数: WAV 格式 (优化为语音识别)"
        ffmpeg -i "$input_file" -acodec pcm_s16le -ar 16000 -ac 1 -y "$output_file" 2>/dev/null
    else
        echo "⚙️  转换参数: 通用格式"
        ffmpeg -i "$input_file" -y "$output_file" 2>/dev/null
    fi
    
    if [[ -f "$output_file" ]]; then
        local output_size=$(stat -c%s "$output_file" 2>/dev/null || stat -f%z "$output_file" 2>/dev/null)
        local output_size_mb=$(echo "scale=2; $output_size / 1024 / 1024" | bc 2>/dev/null || echo "0")
        
        echo
        echo -e "${GREEN}✅ 转换成功!${NC}"
        echo "📁 输出文件: $output_file"
        echo "📊 文件大小: ${output_size_mb} MB"
        echo "🎯 格式: ${output_format^^}"
        echo
        echo -e "${GREEN}💡 现在可以使用转换后的文件进行语音转文字了!${NC}"
        
        echo "$output_file|$output_size|$output_size_mb"
    else
        echo -e "${RED}❌ 转换失败!${NC}"
        return 1
    fi
}

show_online_tools() {
    echo
    echo -e "${BLUE}🌐 在线音频转换工具推荐:${NC}"
    echo
    echo "1. Convertio (https://convertio.co/audio-converter/)"
    echo "   - 支持多种格式"
    echo "   - 免费使用"
    echo "   - 无需安装软件"
    echo
    echo "2. Online Video Converter (https://www.onlinevideoconverter.com/)"
    echo "   - 简单易用"
    echo "   - 支持批量转换"
    echo "   - 免费服务"
    echo
    echo "3. Audio Online Convert (https://audio.online-convert.com/)"
    echo "   - 专业音频转换"
    echo "   - 支持多种参数设置"
    echo "   - 免费使用"
    echo
    echo "4. Zamzar (https://www.zamzar.com/)"
    echo "   - 快速转换"
    echo "   - 支持大文件"
    echo "   - 免费服务"
    echo
    echo -e "${YELLOW}💡 使用建议:${NC}"
    echo "  - 选择 MP3 格式，比特率 128kbps"
    echo "  - 采样率选择 16kHz 或 44.1kHz"
    echo "  - 声道选择单声道（mono）"
}

main() {
    # 检查参数
    if [[ $# -eq 0 ]] || [[ "$1" == "--help" ]] || [[ "$1" == "-h" ]]; then
        print_usage
        exit 0
    fi
    
    local input_file="$1"
    local output_format="${2:-mp3}"
    
    # 检查 FFmpeg
    if ! check_ffmpeg; then
        exit 1
    fi
    
    # 检查输入文件
    local file_info=$(get_file_info "$input_file")
    if [[ $? -ne 0 ]]; then
        echo -e "${RED}❌ 错误: 文件不存在: $input_file${NC}"
        exit 1
    fi
    
    IFS='|' read -r file_size file_size_mb file_ext supported <<< "$file_info"
    
    if [[ "$supported" == "false" ]]; then
        echo -e "${RED}❌ 错误: 不支持的音频格式: $file_ext${NC}"
        echo -e "${GREEN}✅ 支持的格式: ${SUPPORTED_INPUT_FORMATS[*]}${NC}"
        exit 1
    fi
    
    # 检查输出格式
    local recommended=false
    for format in "${RECOMMENDED_OUTPUT_FORMATS[@]}"; do
        if [[ "$output_format" == "$format" ]]; then
            recommended=true
            break
        fi
    done
    
    if [[ "$recommended" == "false" ]]; then
        echo -e "${YELLOW}⚠️  警告: 不推荐的输出格式: $output_format${NC}"
        echo -e "${GREEN}✅ 推荐格式: ${RECOMMENDED_OUTPUT_FORMATS[*]}${NC}"
        echo
    fi
    
    # 显示文件信息
    echo -e "${BLUE}📁 文件信息:${NC}"
    echo "   路径: $input_file"
    echo "   大小: ${file_size_mb} MB"
    echo "   格式: ${file_ext^^}"
    echo "   输出格式: ${output_format^^}"
    echo
    
    # 执行转换
    local result=$(convert_audio "$input_file" "$output_format")
    if [[ $? -eq 0 ]]; then
        IFS='|' read -r output_file output_size output_size_mb <<< "$result"
        echo
        echo -e "${GREEN}🎉 转换完成! 文件已保存到: $output_file${NC}"
    else
        echo
        echo -e "${RED}❌ 转换失败!${NC}"
        echo "请检查输入文件格式是否正确"
        echo
        echo -e "${YELLOW}💡 如果转换失败，可以尝试使用在线转换工具:${NC}"
        show_online_tools
        exit 1
    fi
}

# 如果直接运行此脚本
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
    main "$@"
fi
